import random



from common.readyaml import ReadYamlData
from common.recordlog import logs

class DebugTalk:
    def __init__(self):
        self.read = ReadYamlData()
    # 获取extract.yaml文件节点值，两种情况：子节点值为字典 子节点值为列表
    def get_extract_data(self, node_name, randoms=None):
        """
        获取extract.yaml数据，首先判断randoms是否为数字类型，如果不是就获取node节点的子节点数据，若为数字类型，则node节点对应的为列表，根据randoms的值进行不同操作处理
        :param node_name: extract.yaml文件中的key值
        :param randoms: int类型，0：随机读取；-1：读取全部，返回字符串形式；其他根据列表索引取值，取第一个值为1，第二个为2，以此类推;
        :return:
        """
        # 调用get_extract_yaml读取extract.yaml文件中的节点值
        try:
            data = self.read.get_extract_yaml(node_name)
            if randoms is None:
                return data
        except Exception as e:
            logs.error(f"获取extract.yaml文件中的节点值失败  异常：{e}")
        else:
            # 判断入参randoms是否为数字类型
            try:
                randoms = float(randoms)
                is_number = True
            except (ValueError, TypeError):
                is_number = False
            try:
                # 若入参randoms为数字类型，说明data为一个列表，将randoms转化为int类型，并根据值进行不同操作
                if is_number:
                    randoms = int(randoms)
                    data_value = {
                        randoms:self.get_extract_data_by_order(data,randoms),
                        0:random.choice(data),
                        -1:",".join(data),
                    }
                    data = data_value[randoms]
                # 说明data为一个字典
                else:
                    data =data[randoms]
                    logs.info(f"获取extract.yaml文件中节点值成功 节点值：{data}")
                return data
            except Exception as e:
                logs.error(f"获取extract.yaml文件中的节点值失败  异常：{e}")

    # 获取extract.yaml数据，不为0、-1、-2，则按顺序读取文件key的数据
    def get_extract_data_by_order(self,data,randoms):
        if randoms not in (0,-1,-2):
            return data[randoms-1]